// string Demo
// Created by Administrator on 2025/6/26.
//

#include <complex>
#include <iostream>
#include <string>
using namespace std;

void baseFunc() {
    string txt = "hello world";

    cout << "txt 是否为空？" << txt.empty() << endl;
    cout << "txt 的长度为：" << txt.size() << endl; // txt.length() 效果相同
    cout << "txt 下标为4的字符为：" << txt[4] << endl; // txt.at(4) 效果相同，带边界检查

    const string subTxt = txt.substr(0, 5);
    cout << "txt 下标从 0 至 5 的内容为：" << subTxt << endl;

    const int index = txt.find("world"); // txt.rfind("world") 从尾部开始查找
    cout << "txt 中 world 的下标为：" << index << endl;

    // 替换内容
    string modifyTxt = txt;
    int keywordIndex = modifyTxt.find("world");
    if (keywordIndex != string::npos) {
        //  string::npos = -1
        modifyTxt.replace(keywordIndex, 5, "C++");
    }
    cout << "替换后的内容为：" << modifyTxt << endl;

    // 追加内容
    modifyTxt.append(",java");
    modifyTxt.append(",javaScript");
    cout << "txt 追加内容：" << modifyTxt << endl;

    // 在指定下标插入内容
    modifyTxt.insert(keywordIndex, "C,");
    cout << "txt 插入内容：" << modifyTxt << endl;

    // 移除指定下标到指定长度的内容
    modifyTxt.erase(keywordIndex, 2);
    cout << "txt 移除内容：" << modifyTxt << endl;

    // 查询关键字第一次出现的下标
    const int queryFirstIndex = modifyTxt.find_first_of("java"); // 返回 'j'ava 所在的下标
    cout << "查询关键字“java”的关键字第一次出现的下标为：" << queryFirstIndex << endl;

    // 查询关键字最后一次出现的下标
    const int queryLastIndex = modifyTxt.find_last_of("java"); // 返回 jav'a' 所在的下标
    cout << "查询关键字“java”的关键字最后一次出现的下标为：" << queryLastIndex << endl;

    // 清空内容
    modifyTxt.clear();
    cout << "modifyTxt 的长度为：" << modifyTxt.size() << endl;

    // 比较字符串是否相等， 0 = 相等
    const string msg1 = "hello c++";
    const string msg2 = "hello c++";

    cout << "msg1 和 msg2 是否相等：" << msg1.compare(msg2) << endl;
}

int main(int argc, char *argv[]) {
    baseFunc();
}
